import java.util.Scanner;

public class Test {


    //非对称之美
    //链接：https://ac.nowcoder.com/acm/problem/214851
    //来源：牛客
    //给出一个字符串，求最长非回文子字符串的长度
    //输入描述:
    //在一行中给出一个字符串s,1≤∣s∣≤10^7
    //输出描述:
    //一个整数
    //示例1
    //输入
    //meow
    //输出
    //4
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] s = in.next().toCharArray();
        int n= s.length;
        boolean flag = false;
        for (int i = 1; i < n; i++) {
            if (s[i] != s[0]){
                flag = true;
                break;
            }
        }

        if (flag == true){
            flag = false;
            int l = 0,r = n-1;
            while(l<r){
                if (s[l] == s[r]){
                    l++; r--;
                }else{
                    flag = true;
                    break;
                }
            }
            if (flag == true) System.out.println(n);
            else System.out.println(n-1);
        }else{
            System.out.println(0);
        }
    }


    //连续子数组最大和（动态规划-线性dp）
    //给定一个长度为n 的数组，数组中的数为整数。
    //请你选择一个非空连续子数组，使该子数组所有数之和尽可能大，
    // 子数组最小长度为1。求这个最大值。
    //输入描述：
    //第一行为一个正整数n ，代表数组的长度。1≤n≤2∗10^5
    //第二行为n 个整数ai，用空格隔开，代表数组中的每一个数。 |ai|≤10^9
    //输出描述：
    //连续子数组的最大之和。
    //示例1
    //输入：
    //8
    //1 -2 3 10 -4 7 2 -5
    //输出：
    //18
    //说明：
    //经分析可知，输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
    //示例2
    //输入：
    //1
    //2
    //输出：
    //2
    //示例3
    //输入：
    //1
    //-10
    //输出：
    //-10
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n+1];
        int[] dp = new int[n+1];
        for (int i = 1; i <= n; i++) {
            arr[i] = in.nextInt();
        }
        int ret = -101;
        for (int i = 1; i <= n; i++) {
            dp[i] = Math.max(dp[i-1],0)+arr[i];
            ret = Math.max(dp[i],ret);
        }
        System.out.println(ret);

    }


    //经此一役小红所向无敌
    //链接：https://ac.nowcoder.com/acm/problem/223985
    //来源：牛客网
    //经过重重困难，对立和光终于来到魔王城，和最终的大魔王——小红进行决战。
    //已知小红的血量是10^999999999
    //对立的攻击力是a ，血量是h 。
    //光的攻击力是b ，血量是k 。
    //每回合光先对小红发起攻击，然后对立对小红发起攻击，然后小红展开幻术，
    // 令光和对立同时互相攻击。
    //每次攻击后，受击者的血量会减掉攻击者的攻击力。
    //当光和对立其中一人死亡后，另一人会悲痛欲绝，对小红发出自己攻击力*10的伤害的大招，
    // 然后自杀。（若两人同时死亡，则两人都无法发出大招）
    //小红想知道，弱小的光和对立，她们能对自己造成多少点伤害？
    //输入描述:
    //一行4 个正整数a ,h ,b ,k ，用空格隔开。
    //1≤a,b,h,k≤10^9
    //输出描述:
    //一个正整数，代表小红受到的伤害。
    //示例1
    //输入
    //2 3 1 3
    //输出
    //26
    //说明
    //第一回合，小红受到了对立和光的攻击，并让她们互相攻击。第一回合结束时，
    // 小红共受到 3 点伤害。这时对立血量为 2 ，光的血量为 1 。
    //第二回合，小红受到了对立和光的攻击，并让她们互相攻击。这时对立血量为 1 ，
    // 光的血量为 0 死亡。对立放出大招后自杀。本回合小红共受到 23 点伤害。
    //小红受到的总伤害为3+23=26 。
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        long a = in.nextInt();
        long h = in.nextInt();
        long b = in.nextInt();
        long k = in.nextInt();
        long ret = 0;
        long n = Math.min(h/b,k/a);
        ret+=n*(a+b);

        h-=n*b;
        k-=n*a;

        if (h>0 && k>0){
            h-=b;k-=a;
            ret+=a+b;
        }
        if (h>0 || k>0){
            ret+=10*(h>0?a:b);
        }
        System.out.println(ret);
    }
}



